package com.xxl.service;

import com.xxl.dto.UserDto;

import java.util.List;

/**
 * 用户服务：跟用户一切有关的服务
 * @author xxl
 * @date 2023/3/30
 */

public interface UserService {
    /**
     * 登录服务
     * @param  username 用户名
     * @param  password 密码
     * @return  UserDto 用户实体类对像
     */
    UserDto login(String username,String password);

    /**
     * 查找是否有此人
     * @param username 用户名
     * @return  UserDto 用户实体类对象
     */
    String findByUsername(String username);

    /**
     * 查找此用户所有关注
     * @param username 用户名
     * @return  List<String>  关注名字列表，只需要获取关注的，粉丝为空
     */
    List<String> queryAllFollow(String username);
    /**
     * 查找此用户所有粉丝名
     * @param  username 用户名
     * @return List<String>  粉丝名字列表，只需要获取粉丝的，关注为空
     */
    List<String> queryAllFollowing(String username);

    /**
     * 注册(添加)
     * @param userDto 用户实体类对象
     * @return  int   < 0:注册失败
     */
     int  register(UserDto userDto);



    /**
     * 修改账户信息
     * @param t  实体类对象
     * @param username 以前的账户名(主键)
     * @return
     */
    <T> int modifyUser(T t,String username);

    /**
     * 模糊查找某个人
     * @param name 用户名
     * @return  List<UserDto> 用户实体类对象集合
     */
    List<UserDto> findSomeOne(String name);

    /**
     * 管理员权限：查询所有用户
     * @return List<UserDto>   用户实体类对象集合
     */
    List<UserDto> queryAllUser();

    /**
     * 删除某个用户
     * @param username 用户名
     * @return int  小于等于0删除失败
     */
    int deleteUserByUsername(String username);

    /**
     * 关注某人
     * @param followName 被关注(关注)
     * @param followingName 关注者(粉丝，当前用户)
     * @return int > 0 成功
     */
    int followUser(String followName,String followingName);

    /**
     * 取消关注某人
     * @param followingName 关注者(粉丝,当前用户)
     * @param followName 被关注(关注)
     * @return int > 0 成功
     */
    int cancelFollowUser(String followName,String followingName);
}
